package ar.edu.frba.utn.dds.Vuelo;

import java.math.BigDecimal;

import ar.edu.frba.utn.dds.Usuario.Usuario;

public class Asiento {
	private Vuelo vuelo;
	private String codigoVuelo;
	private String codigoAsiento;
	private BigDecimal precioAsiento;
	private String claseAsiento;
	private String ubicacionAsiento;
	private String estadoAsiento;
	private Boolean reservado;
	private String dniUsuario;
	private String horaLlegada;
	private String horaSalida;
	private String origen;
	private String destino;
	private String fechaLlegada;
	private String fechaSalida;
	private BigDecimal precioTotal;
	private Integer codigoIndice;
	
	/**
	 * Metodo que se encarga de instanciar un asiento
	 * @param codigoAsiento
	 * @param precioAsiento
	 * @param claseAsiento
	 * @param ubicacionAsiento
	 * @param estadoAsiento
	 * @param codigoIndice
	 * @param companiaAerea
	 * @param user
	 */
	public Asiento(Vuelo vuelo, String codigoVuelo, String codigoAsiento, Double precioAsiento, String claseAsiento,
			String ubicacionAsiento, String estadoAsiento, Boolean reservado,String dniUsuario,
			String horaSalida, String horaLlegada, String origen, String destino,String fechaSalida, String fechaLlegada,
			Integer codigoIndice) {
		this.setCodigoVuelo(codigoVuelo);
		this.setCodigoAsiento(codigoAsiento);
		this.setPrecioAsiento(BigDecimal.valueOf(precioAsiento));
		this.setClaseAsiento(claseAsiento);
		this.setUbicacionAsiento(ubicacionAsiento);
		this.setEstadoAsiento(estadoAsiento);
		this.setReservado(reservado);
		this.setDniUsuario(dniUsuario);
		this.setHoraSalida(horaSalida);
		this.setHoraLlegada(horaLlegada);
		this.setOrigen(origen);
		this.setDestino(destino);
		this.setFechaSalida(fechaSalida);
		this.setFechaLlegada(fechaLlegada);
		Double precioDelAsiento = Double.valueOf(precioAsiento);
		BigDecimal multiplicacionPorcentaje = BigDecimal.valueOf(precioDelAsiento * 1.15);
		this.setPrecioTotal(multiplicacionPorcentaje);
		this.setVuelo(vuelo);
		this.setCodigoIndice(codigoIndice);
	}

	public String getCodigoAsiento() {
		return codigoAsiento;
	}


	public void setCodigoAsiento(String codigoAsiento) {
		this.codigoAsiento = codigoAsiento;
	}


	public BigDecimal getPrecioAsiento() {
		return precioAsiento;
	}


	public void setPrecioAsiento(BigDecimal precioAsiento) {
		this.precioAsiento = precioAsiento;
	}


	public String getClaseAsiento() {
		return claseAsiento;
	}


	public void setClaseAsiento(String claseAsiento) {
		this.claseAsiento = claseAsiento;
	}


	public String getUbicacionAsiento() {
		return ubicacionAsiento;
	}


	public void setUbicacionAsiento(String ubicacionAsiento) {
		this.ubicacionAsiento = ubicacionAsiento;
	}

	public String getEstadoAsiento() {
		return estadoAsiento;
	}

	public void setEstadoAsiento(String estadoAsiento) {
		this.estadoAsiento = estadoAsiento;
	}

	public Boolean getReservado() {
		return reservado;
	}

	public void setReservado(Boolean reservado) {
		this.reservado = reservado;
	}

	public BigDecimal getPrecioTotal() {
		return precioTotal;
	}


	public void setPrecioTotal(BigDecimal precioTotal) {
		this.precioTotal = precioTotal;
	}

	public Vuelo getVuelo() {
		return vuelo;
	}

	public void setVuelo(Vuelo vuelo) {
		this.vuelo = vuelo;
	}

	public Integer getCodigoIndice() {
		return codigoIndice;
	}


	public void setCodigoIndice(Integer codigoIndice) {
		this.codigoIndice = codigoIndice;
	}
	
	public String getDniUsuario() {
		return dniUsuario;
	}

	public void setDniUsuario(String dniUsuario) {
		this.dniUsuario = dniUsuario;
	}
	
	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public String getDestino() {
		return destino;
	}

	public void setDestino(String destino) {
		this.destino = destino;
	}

	public String getFechaLlegada() {
		return fechaLlegada;
	}

	public void setFechaLlegada(String fechaLlegada) {
		this.fechaLlegada = fechaLlegada;
	}

	public String getFechaSalida() {
		return fechaSalida;
	}

	public void setFechaSalida(String fechaSalida) {
		this.fechaSalida = fechaSalida;
	}

	public String getHoraLlegada() {
		return horaLlegada;
	}

	public void setHoraLlegada(String horaLlegada) {
		this.horaLlegada = horaLlegada;
	}

	public String getHoraSalida() {
		return horaSalida;
	}

	public void setHoraSalida(String horaSalida) {
		this.horaSalida = horaSalida;
	}
	public String getCodigoVuelo() {
		return codigoVuelo;
	}

	public void setCodigoVuelo(String codigoVuelo) {
		this.codigoVuelo = codigoVuelo;
	}

	/**
	 * Metodo que se encarga de retornar una booleana donde nos indica si es un asiento super oferta
	 * @return
	 */
	public boolean sosSuperOferta(Usuario user){
		Double montoMinimoOferta = 4000.00;
		Double montoMaximoOferta = 8000.00;
		Double montoRecargo = user.montoRecargo();
		Double precioTotal = Double.valueOf(String.valueOf(this.getPrecioTotal()));
		
		Double precioDelAsiento = precioTotal+montoRecargo;
		Boolean condicion =(this.getClaseAsiento().equalsIgnoreCase("P") 
				&& this.compararDouble(precioDelAsiento,montoMaximoOferta)<0)
			|| (this.getClaseAsiento().equalsIgnoreCase("E") && 
					this.compararDouble(precioDelAsiento,montoMinimoOferta)<0); 
		return condicion;
			
	}
	
	/**
	 * Metodo que se encarga de comparar los valores Double
	 * @param precioTotal
	 * @param montoAComparar
	 * @return
	 */
	private Integer compararDouble(Double precioTotal,Double montoAComparar){
		return Double.compare(precioTotal, montoAComparar);
	}
	
	public void agregarCostoUsuario(Usuario user){
		this.setPrecioTotal(BigDecimal.valueOf(Double.valueOf(String.valueOf(this.getPrecioTotal()))+user.montoRecargo()));
	}
}
